/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function (nums, target) {
  let left = binarySearch(nums, target, true)
  let right = binarySearch(nums, target, false) - 1
  if (left > right) return [-1, -1]
  if (left <= right && right < nums.length && nums[left] === target && nums[right] === target) {
    return [left, right]
  }
};
//nums = [5,7,7,8,8,10], target = 8
function binarySearch (nums, target, lower) { // 传入三个参数 数组 目标值 和 标识 true 找左边界 false找右边界
  let left = 0
  let right = nums.length - 1
  let ans = nums.length // 初始左右边界 和要插入的位置 是最后一个位置
  while (left <= right) {
    let mid = left + Math.floor((right - left) / 2) // 计算中间位置
    if (nums[mid] > target || (lower && nums[mid] >= target)) {
      // 如果找左边界 中间的大于等于目标值 让right变成中间的-1 ans = mid 这样一直找就能找到左边界
      // 如果找右边界 中间的大于目标值 那么会让left = mid + 1 那么会走到10 ans = 10所在的下标 最后返回ans
      right = mid - 1
      ans = mid
    } else {
      left = mid + 1
    }
  }
  return ans
}